package org.simp.interceptor;

import org.simp.core.message.SimpMessage;
import org.simp.core.request.SimpRequest;
import org.simp.handler.SimpHandler;
/**
 * 业务handler处理消息之前进行拦截处理，和业务处理消息之后进行处理
 * @author Administrator
 *
 */
public interface SimpHandlerInterceptor {
	
	/**
	 * 接受到simpRequest
	 * @param request
	 * @param handler
	 */
	public void receiveRequest(SimpRequest request,SimpHandler handler);
	/**
	 * 请求进入业务handler之前进行拦截处理
	 * @param request
	 * @param handler
	 * @return
	 */
	public boolean preHandler(SimpRequest request ,SimpHandler handler);
	
	/**
	 * 业务handler处理返回之后执行
	 * @param request
	 * @param message 业务handler返回的消息，可能为空
	 * @param handler
	 */
	public void postHandler(SimpRequest request,SimpMessage message,SimpHandler handler);
	
	/**
	 * 当前业务处理handler无法处理该消息，进行抛出，在该方法中进行处理
	 * @param request
	 * @param handler
	 */
	public void throwSimpRequest(SimpRequest request,SimpHandler handler);

}
